home *** CD-ROM | disk | FTP | other *** search
/ PC for Alla 2005 April / PC för Alla 0504.iso / noje / arcade-3.6.exe / tetris.swf / scripts / frame_4 / DoAction.as
Encoding:
Text File  |  2003-11-29  |  6.6 KB  |  333 lines

  1. startFall = function()
  2. {
  3.    timeout = setInterval(down,speed);
  4. };
  5. stopFall = function()
  6. {
  7.    clearInterval(timeout);
  8. };
  9. drawBlock = function(num, blockPos)
  10. {
  11.    b_mc[blockPos].gotoAndStop(num + 1);
  12. };
  13. drawNextBlock = function(num, blockPos)
  14. {
  15.    next_mc[blockPos].gotoAndStop(num + 1);
  16. };
  17. drawThisShape = function()
  18. {
  19.    if(moved)
  20.    {
  21.       var i = 0;
  22.       while(i < 4)
  23.       {
  24.          drawBlock(0,block_array[i]);
  25.          i++;
  26.       }
  27.    }
  28.    else
  29.    {
  30.       moved = true;
  31.    }
  32.    var i = 0;
  33.    while(i < 4)
  34.    {
  35.       blockPos = shape_array[thisShape * 16 + rotation * 4 + i];
  36.       block_array[i] = (blockPos >> 2) * 6 + blockPos + xPos + yPos;
  37.       drawBlock(thisShape + 1,block_array[i]);
  38.       i++;
  39.    }
  40. };
  41. drawNextShape = function()
  42. {
  43.    nextShape = int(Math.random() * 7);
  44.    var i = 0;
  45.    while(i < 11)
  46.    {
  47.       drawNextBlock(0,i);
  48.       i++;
  49.    }
  50.    var i = 0;
  51.    while(i < 4)
  52.    {
  53.       drawNextBlock(nextShape + 1,shape_array[nextShape * 16 + i]);
  54.       i++;
  55.    }
  56. };
  57. collision = function(x, y, rot)
  58. {
  59.    var i = 0;
  60.    while(i < 4)
  61.    {
  62.       blockPos = shape_array[thisShape * 16 + rot * 4 + i];
  63.       if(flag_array[(blockPos >> 2) * 6 + blockPos + x + y] != 0)
  64.       {
  65.          return true;
  66.       }
  67.       i++;
  68.    }
  69.    return false;
  70. };
  71. left = function()
  72. {
  73.    var i = 0;
  74.    while(i < 4)
  75.    {
  76.       var x = block_array[i] - yPos;
  77.       while(x >= 0)
  78.       {
  79.          if(x == 0)
  80.          {
  81.             return undefined;
  82.          }
  83.          x -= 10;
  84.       }
  85.       i++;
  86.    }
  87.    if(!collision(xPos - 1,yPos,rotation))
  88.    {
  89.       xPos--;
  90.       drawThisShape();
  91.    }
  92. };
  93. right = function()
  94. {
  95.    var i = 0;
  96.    while(i < 4)
  97.    {
  98.       var x = block_array[i] - yPos;
  99.       while(x >= 0)
  100.       {
  101.          if(x == 9)
  102.          {
  103.             return undefined;
  104.          }
  105.          x -= 10;
  106.       }
  107.       i++;
  108.    }
  109.    if(!collision(xPos + 1,yPos,rotation))
  110.    {
  111.       xPos++;
  112.       drawThisShape();
  113.    }
  114. };
  115. rotate = function(clockwise)
  116. {
  117.    testRot = rotation;
  118.    if(clockwise)
  119.    {
  120.       testRot++;
  121.    }
  122.    else
  123.    {
  124.       testRot--;
  125.    }
  126.    if(testRot == 4)
  127.    {
  128.       testRot = 0;
  129.    }
  130.    else if(testRot == -1)
  131.    {
  132.       testRot = 3;
  133.    }
  134.    var i = 0;
  135.    while(i < 4)
  136.    {
  137.       blockPos = shape_array[thisShape * 16 + testRot * 4 + i];
  138.       var x = (blockPos >> 2) * 6 + blockPos + xPos;
  139.       while(x >= -1)
  140.       {
  141.          if(x == -1 && xPos < 0 || x == 0 && xPos > 6)
  142.          {
  143.             return undefined;
  144.          }
  145.          x -= 10;
  146.       }
  147.       i++;
  148.    }
  149.    if((blockPos >> 2) * 6 + blockPos + xPos + yPos > 179)
  150.    {
  151.       return undefined;
  152.    }
  153.    if(!collision(xPos,yPos,testRot))
  154.    {
  155.       rotation = testRot;
  156.       drawThisShape();
  157.       sound_mc.gotoAndPlay("popHi");
  158.    }
  159. };
  160. down = function()
  161. {
  162.    if(gameOver || simult)
  163.    {
  164.       return undefined;
  165.    }
  166.    score++;
  167.    if(block_array[3] - xPos < 170 && !collision(xPos,yPos + 10,rotation))
  168.    {
  169.       yPos += 10;
  170.       drawThisShape();
  171.    }
  172.    else
  173.    {
  174.       var i = 0;
  175.       while(i < 4)
  176.       {
  177.          flag_array[block_array[i]] = thisShape + 1;
  178.          i++;
  179.       }
  180.       simult = 0;
  181.       var y = 0;
  182.       while(y < 180)
  183.       {
  184.          var x = 0;
  185.          while(x < 10)
  186.          {
  187.             if(flag_array[x + y] == 0)
  188.             {
  189.                break;
  190.             }
  191.             if(x == 9)
  192.             {
  193.                stopFall();
  194.                var i = 0;
  195.                while(i < 10)
  196.                {
  197.                   b_mc[i + y].bang_mc.y = y;
  198.                   b_mc[i + y].bang_mc.play();
  199.                   i++;
  200.                }
  201.                simult++;
  202.                lines++;
  203.             }
  204.             x++;
  205.          }
  206.          y += 10;
  207.       }
  208.       if(simult)
  209.       {
  210.          sound_mc.gotoAndPlay("win");
  211.          switch(simult)
  212.          {
  213.             case 1:
  214.                score += level * 40;
  215.                break;
  216.             case 2:
  217.                score += level * 100;
  218.                break;
  219.             case 3:
  220.                score += level * 300;
  221.                break;
  222.             case 4:
  223.                score += level * 1200;
  224.          }
  225.       }
  226.       scoreTxt = String(score).addCommas();
  227.       if(collision(xPos,yPos,rotation) && yPos == -10)
  228.       {
  229.          gameOver = true;
  230.          stopFall();
  231.          sound_mc.gotoAndPlay("end");
  232.          quitGame_mc.gotoAndStop(2);
  233.          quitGame_mc._visible = true;
  234.       }
  235.       else
  236.       {
  237.          level = int(lines / 10) + startLevel;
  238.          speed = level >= 10 ? 100 : 600 - level * 50;
  239.          xPos = 3;
  240.          yPos = -10;
  241.          rotation = 0;
  242.          moved = false;
  243.          thisShape = nextShape;
  244.          if(!simult)
  245.          {
  246.             drawNextShape();
  247.             drawThisShape();
  248.             sound_mc.gotoAndPlay("popLo");
  249.          }
  250.       }
  251.    }
  252.    updateAfterEvent();
  253. };
  254. keyListener = new Object();
  255. keyListener.onKeyDown = function()
  256. {
  257.    if(gameOver || simult)
  258.    {
  259.       return undefined;
  260.    }
  261.    var keyCode = Key.getCode();
  262.    switch(keyCode)
  263.    {
  264.       case 80:
  265.          pause_btn.onPress();
  266.          break;
  267.       case 81:
  268.          quit_btn.onPress();
  269.    }
  270.    if(!paused)
  271.    {
  272.       switch(keyCode)
  273.       {
  274.          case Key.LEFT:
  275.             left();
  276.             break;
  277.          case Key.RIGHT:
  278.             right();
  279.             break;
  280.          case Key.DOWN:
  281.             _root.onEnterFrame = down;
  282.             break;
  283.          case Key.UP:
  284.          case 88:
  285.             rotate(true);
  286.             break;
  287.          case 90:
  288.             rotate(false);
  289.       }
  290.    }
  291.    updateAfterEvent();
  292. };
  293. keyListener.onKeyUp = function()
  294. {
  295.    delete _root.onEnterFrame;
  296. };
  297. Key.addListener(keyListener);
  298. gameOver = true;
  299. paused = moved = false;
  300. score = scoreTxt = lines = thisShape = nextShape = rotation = 0;
  301. level = startLevel;
  302. speed = level >= 10 ? 100 : 600 - level * 50;
  303. xPos = 3;
  304. yPos = -10;
  305. shape_array = new Array(5,6,9,10,5,6,9,10,5,6,9,10,5,6,9,10,4,5,6,9,1,4,5,9,1,4,5,6,1,5,6,9,4,5,9,10,2,5,6,9,4,5,9,10,2,5,6,9,5,6,8,9,1,5,6,10,5,6,8,9,1,5,6,10,4,5,6,8,0,1,5,9,2,4,5,6,1,5,9,10,4,5,6,10,1,5,8,9,0,4,5,6,1,2,5,9,4,5,6,7,1,5,9,13,4,5,6,7,1,5,9,13);
  306. block_array = new Array(0,0,0,0);
  307. flag_array = new Array();
  308. var i = 18;
  309. while(i >= 0)
  310. {
  311.    var j = 0;
  312.    while(j < 10)
  313.    {
  314.       var k = i * 10 + j;
  315.       b_mc.attachMovie("block",k,k,{_x:j * 20,_y:i * 20});
  316.       flag_array[k] = 0;
  317.       j++;
  318.    }
  319.    i--;
  320. }
  321. var i = 0;
  322. while(i < 3)
  323. {
  324.    var j = 0;
  325.    while(j < 4)
  326.    {
  327.       var k = i * 4 + j;
  328.       next_mc.attachMovie("block",k,k,{_x:j * 20,_y:i * 20});
  329.       j++;
  330.    }
  331.    i++;
  332. }
  333.